在此篇文章之前,大部分的程式碼都是建立在主函式 (main function) 中,但隨著需求更加複雜,專案規模越來越大,若是將所有功能都包在主函式裡頭,那可讀性會很差,所以程式設計師撰寫函式以來分離程式碼,將功能切出來,獨立寫成一個函式,也實現程式碼共用的基礎。
這裡先介紹一個簡單的函式如何撰寫:
package main
import (
"fmt"
)
func hello() {
fmt.Println("Hello Rookie")
}
func main() {
hello() // Hello Rookie
}
這是一個很簡單的函式,我們將印出的功能包在 hello 這個函式裡頭,最後在主程式裡呼叫 hello 這個函式,來達到相同的目的,我們下面接著示範更多函式的功能。
撰寫函式(輸入參數)
這邊示範如何將參數帶入函式,這會使得能夠更靈活使用函式:
package main
import (
"fmt"
)
func hello(name string) {
fmt.Println("Hello", name)
}
func main() {
hello("Jack") // Hello Jack
hello("Zhen") // Hello Zhen
}
當然函式也不是只能帶入一個參數,可以帶入多個參數,這些參數型態也是可以依照自己需求調整:
package main
import (
"fmt"
)
func hello(name1, name2 string) {
fmt.Println("Hello", name1, "and", name2)
}
func main() {
hello("Jack", "Zhen") // Hello Jack and Zhen
}
Go 語言的函式也支援輸入不定長度的參數:
package main
import (
"fmt"
)
func add(x ...int) {
var total int
for _, xi := range x {
total += xi
}
fmt.Println(total)
}
func main() {
add(1,2,3,4,5) // 15
}
大部分情況下,我們通常不會直接印出值來,而是以回傳值來取得自己要的數據,這時就可以用 return 來實現:
package main
import (
"fmt"
)
func add(x, y int) int{
return x + y
}
func main() {
fmt.Println(add(1, 2) == 3) // true
}
你也可以對回傳值命:
package main
import (
"fmt"
)
func add(x, y int) (z int){
z = x + y
return
}
func main() {
fmt.Println(add(1, 2) == 3) // true
}
init 函式是個特殊的函示,如果一段程式碼內包含著 init 函式,則在執行整個程式碼時,會優先值些 init裡的程式碼,通常需要初始化一些外部資源時,會將這些程式碼寫在init 函式裡,以下是 Go 官方網站的例子:
func init() {
if user == "" {
log.Fatal("$USER not set")
}
if home == "" {
home = "/home/" + user
}
if gopath == "" {
gopath = home + "/go"
}
// gopath may be overridden by --gopath flag on command line.
flag.StringVar(&gopath, "gopath", gopath, "override default GOPATH")
}
今天介紹 Go 語言基本的函示撰寫方法,函式撰寫變化其實還有很多種,可以因應自己的需求做調整,希望幾天介紹能使各位讀者對 Go 語言的函式有初步的了解,感謝您今天的閱讀!